package org.example.lease.service.impl;


import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.example.lease.mapper.LabelInfoMapper;
import org.example.lease.model.entities.LabelInfo;
import org.example.lease.model.enums.ItemType;
import org.example.lease.service.LabelInfoService;
import org.springframework.stereotype.Service;

import java.util.List;


/**
 * @author 宋孟林
 * @description
 * @date: 2025/5/12 16:52
 */
@Service
@Slf4j
public class LabelInfoServiceImpl extends ServiceImpl<LabelInfoMapper, LabelInfo>
        implements LabelInfoService {

    @Resource
    private LabelInfoMapper labelInfoMapper;


    /**
     * 使用Wrappers.lambdaQuery(type.class)来简化构建条件构造器的过程
     * 前端传递的参数是string类型的code，使用mvc的自定义转换器转换为了枚举对象为ItemType类型之后，由于数据库中存储的并非是
     * 枚举对象本身，而是存储的枚举对象中的code值，所以还需要将枚举对象转换为int类型的code才可以从数据库中查询数据
     * mybatisplus内置了TypeHandler来处理这种需求，默认处理策略是将枚举对象转换为枚举对象的name，所以还需要配置一下我们需要转换为code
     * mp提供了这样一个策略，在枚举类的字段中添加注解@EnumValue就可以将itemType类型的对象转换为code了，这就是为什么在LambdaQueryWrapper中的eq()
     * 方法，列名参数填写int类型的type，而值参数填写枚举对象
     *
     * @param itemType itemType
     * @return labelsInfos --> list
     */
    @Override
    public List<LabelInfo> labelList(ItemType itemType) {
        List<LabelInfo> labelInfos = labelInfoMapper.selectList(Wrappers.lambdaQuery(LabelInfo.class).
                eq(itemType != null, LabelInfo::getType, itemType));
        //lambda表达式写法
        //Wrappers.lambdaQuery(LabelInfo.class).eq(labelInfo -> labelInfo.getItemType(), itemType.getCode())
        log.info("按照类型{}查询标签集合{}", itemType, labelInfos);
        return labelInfos;
    }

//    @Override
//    public List<LabelInfo> labelList(ItemType itemType) {
//        LambdaQueryWrapper<LabelInfo> wrapper = Wrappers.lambdaQuery();
//        List<LabelInfo> labelInfos = labelInfoMapper.selectList(wrapper.eq(LabelInfo::getType, itemType.getCode()));
//        log.info("按照类型{}查询标签集合{}", itemType.getName(), labelInfos);
//        return labelInfos;
//    }
}




